//表格hover
$(function() {
    TableHover();
});

// 设置表格的样式
function TableHover() {
    //数据表格
	$('table.hover tr').mouseover(function(){
		$(this).find('td').addClass('cur');
	});
	$('table.hover tr').mouseout(function(){
	    $(this).find('td').removeClass('cur');
	});
};

/**
* 适应范围：公共函数
* 作者：林超群
* 日期：2011-07-22
* 版本：v1.0.0
* 修改：
*/
var ES = ES || {};
//常用正则
ES.Reg = {
    EMAIL: /\w+([.-_]\w+)*@\w+([.-_]\w+)*\.\w{2,4}/, 		//邮箱
    CN: /^[\u4e00-\u9fa5]*$/, 							//中文
    EN: /^[a-zA-Z]*$/, 									//字母
    NUM: /^[0-9]*$/, 										//数字
    SINT: /^[1-9]\d*$/, 									//正整数
    SFLOAT: /^[1-9]\d*.\d*|0.\d*[1-9]\d*$/, 				//正浮点数
    MONEY: /^((([1-9]\d*)|0)(\.\d{1,2})?)$/					//money格式
    //NOZEROMONEY:/^((([1-9]\d*)|0)(\.\d{1,2})?)$/			//money格式
};
//浏览器判断
ES.BS = {
    Version: navigator.appVersion,  //浏览器的版本，一般不与实际的浏览器版本对应
    IE: ! -[1, ],  //attachEvent，多事件绑定，IE支持
    IE6: ! -[1, ] && !window.XMLHttpRequest,
    Opera: !!window.opera, //Opera支持
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,  //userAgent 浏览器的用户代理字符串
    Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
    Win: navigator.userAgent.indexOf('Windows') >= 0
};
//提供cookie添加、查询和删除操作
ES.Cookie = {
    /**
    * 添加Cookie
    * @param {String}  sName  cookie名
    * @param {String}  sValue  cookie值
    * @param {String}  sExpires  过期时间
    * @param {String}	sPath    指定cookie的路径
    * @param {String}	sDomain	  指定可访问cookie的主机名
    * @param {Boolean} bSecure	  是否加密
    */
    setCookie: function(sName, sValue, sExpires, sPath, sDomain, bSecure) {
        var sCookie = sName + '=' + encodeURIComponent(sValue);
        sExpires && (sCookie += '; expires=' + sExpires);
        sPath && (sCookie += '; path=' + sPath);
        sDomain && (sCookie += '; domain=' + sDomain);
        bSecure && (sCookie += '; secure');
        document.cookie = sCookie;
    },
    /**
    * 获得Cookie
    * @param {String}  sName   cookie名
    * @return {String}  cookie值
    */
    getCookie: function(sName) {
        var sRE = '(?:; )?' + sName + '=([^;]*);?';
        var oRE = new RegExp(sRE);
        if (oRE.test(document.cookie)) {
            return decodeURIComponent(RegExp['$1']);
        } else {
            return null;
        }
    },
    /**
    * 删除Cookie
    * @param {String}	sName	cookie名
    * @param {String}  sPath	cookie路径
    * @param {String}	sDomain	cookie主机名
    */
    delCookie: function(sName, sPath, sDomain) {
        var sCookie = sName + '=; expires=' + (new Date(0)).toGMTString();
        sPath && (sCookie += '; path=' + sPath);
        sDomain && (sCookie += '; domain=' + sDomain);
        document.cookie = sCookie;
    },
    /**
    * 获取正确的Cookie有郊时间
    * @param {Number} days   天
    * @param {Number} hours  小时
    * @param {Number} minutes  分
    * @retrun {String} GMTString
    */
    getExpDate: function(days, hours, minutes) {
        var expDate = new Date();
        if (typeof days === 'number' && typeof hours === 'number' && typeof minutes === 'number') {
            expDate.setDate(expDate.getDate() + parseInt(days));
            expDate.setHours(expDate.getHours() + parseInt(hours));
            expDate.setMinutes(expDate.getMinutes() + parseInt(minutes));
            return expDate.toGMTString();
        }
    }
};
//提供图片的加载
ES.Img = {
    /**
    * 检测图片是否存在（用于图片上传后续显示前的判断，避免出现请求返回404错误）
    * @param {String} url 图片URL
    * @param {Number} loadTime 尝试重复加载次数，如果不设定值，默认为5次
    * @param {Function} fSuccess 图片存在时的回调函数
    * @param {Function} fError 图片不存在时的回调函数
    */
    loadCheck: function(sURL, nLoadTime, fSuccess, fError) {
        var img = new Image();
        //console.log(typeof fSuccess);
        //初始数参数
        //if(undefined === window.tmpInnit) {
        sURL = ('string' === typeof sURL) ? sURL : '';
        nLoadTime = (('number' === typeof nLoadTime) ? nLoadTime : 5) - 1;
        fSuccess = ('function' === typeof fSuccess) ? fSuccess : function() {
            return;
        };
        fError = ('function' === typeof fError) ? fError : function() {
            return;
        };
        //}
        //加载监听
        if (!!(window.attachEvent && !window.opera)) {
            img.onreadystatechange = function() {
                if (img.readyState == 'complete' || img.readyState == 'loaded') {
                    //return true;
                    fSuccess();
                }
            }
        } else {
            img.onload = function() {
                if (img.complete == true) {
                    //return true;
                    fSuccess();
                }
            }
        }
        //如果因为网络或图片的原因发生异常，则显示该图片
        //一定要先把src、error和onload清空
        img.onerror = function() {
            if (0 < nLoadTime) {
                nLoadTime--;
                this.src = undefined;
                this.onerror = null;
                this.onload = null;
                this.onreadystatechange = null;
                //console.log('请求图片失败，可能图片路径错误或图片不存在，再请求。');
                ES.Img.loadCheck(sURL, nLoadTime, fSuccess, fError);
            } else {
                //window.nImgTime = 0;
                this.onerror = null;
                this.onload = null;
                this.onreadystatechange = null;
                //console.log('请求图片失败，终止请求。');
                fError();
                //return false;
            }
        };
        img.src = sURL;
    },
    /**
    * 设置缺失图片
    * @param {Object} me 需要设置缺失图片的对象
    * @param {String} sImgurl 缺失图片路径
    */
    defalutImage: function(me, sImgurl) {
        //me.src = sImgurl;
        ES.Img.loadCheck(sImgurl, 2, function() {
            me.src = sImgurl;
        });
    }
};
//URL相关操作
ES.Url = {
    /**
    * 获取URL参数
    * @return {Object} 返回是一个包含所有URL参数的Object
    */
    getParams: function() {
        //name = name || '';
        var urlParam = window.location.search.substr(1);
        var params = {};
        if ('' != urlParam) {
            urlParam = urlParam.split('&');
            for (var i = 0; i < urlParam.length; i++) {
                params[urlParam[i].split('=')[0]] = unescape(urlParam[i].split('=')[1]);
            }
        }
        return params;
    },
    urlEncode: function(sKeyWord) {
        var aEncodeillegalChars = ['%25', '%26', '*', '%3F', '%3A', '%3C', '%3E', '%23', '%5C', '%2F', '%7C', '%22', '%2B', '_', '.'];
        var aIllegalChars = ['%', '&', '*', '?', ':', '>', '<', '#', '\\', '\/', '|', '"', '+', '_', '.']; //Url中包含这些字符没法进aspnet_iisapi,#如法取到AbsolutePath只包括#的前部分
        var sEncodeStrs = encodeURIComponent(sKeyWord.replace(/(^\s)|(\s$)/g, ''));
        for (var i = 0, len = aEncodeillegalChars.length; i < len; i++) {
            var rx = new RegExp('\\' + aEncodeillegalChars[i], 'ig');
            sEncodeStrs = sEncodeStrs.replace(rx, '=' + aIllegalChars[i].charCodeAt(0).toString(16).toUpperCase());
        }
        return sEncodeStrs;
    },
    UrlDecode: function(keyWord) {
        var aEncodeillegalChars = ['%25', '%26', '*', '%3F', '%3A', '%3C', '%3E', '%23', '%5C', '%2F', '%7C', '%22', '%2B', '_', '.'];
        var aIllegalChars = ['%', '&', '*', '?', ':', '>', '<', '#', '\\', '\/', '|', '"', '+', '_', '.']; //Url中包含这些字符没法进aspnet_iisapi,#如法取到AbsolutePath只包括#的前部分
        var sEncodeStrs = keyWord;
        for (var i = 0, len = aIllegalChars.length; i < aIllegalChars.length; i++) {
            var rx = new RegExp("=" + aIllegalChars[i].charCodeAt(0).toString(16).toUpperCase(), "ig");
            sEncodeStrs = sEncodeStrs.replace(rx, aEncodeillegalChars[i]);
        }
        sEncodeStrs = decodeURIComponent(sEncodeStrs);
        return sEncodeStrs;
    }
};
ES.Tools = {};
//JQ库下的公共函数
if (typeof $ !== 'undefined') {
    /**
    * 全选
    * @param {JQ Object} oChkSwitch  全选开关JQ对象集
    * @param {{JQ Object} oChkList    实施全选的checkbox对象集
    */
    ES.Tools.selectChk = function(oChkSwitch, oChkList) {
        oChkSwitch.click(function() {
            var me = $(this);
            if (me.attr('checked')) {
                oChkSwitch.attr('checked', 'checked');
                oChkList.not(':checked').attr('checked', 'checked');
            } else {
                oChkSwitch.attr('checked', '')
                oChkList.filter(':checked').attr('checked', '');
            }
        });
    };
    /**
    * 输入过滤
    * @param {JQ Object}	oInput  监听对象
    * @param {RegExp}	rule	过滤规则
    */
    ES.Tools.filterInput = function(oInput, rule) {
        oInput.keyup(function() {
            var me = $(this);
            me.val(me.val().replace(rule, ''));
        });
    };
}
/**
* 替换字符串
* @return {String} 替换后的字符串
*/
ES.Tools.stringFormat = function() {
    if (!arguments.length)
        return null;
    var str = arguments[0],
	o = arguments.length - 1;
    for (var i = 1; i <= o; i++) {
        str = str.replace(/\#\{[\w-\s]*\}/, arguments[i]);
    }
    return str;
};
/**
* 获取keyCode值（兼容各大浏览器）
* @param {Object} e 事件对象
* @return {String} keyCode
*/
ES.Tools.getKeyCode = function(e) {
    return e.keyCode || e.which || e.charCode;
};
ES.Maths = {
    /**
    * 小数截取
    * @param {Number} src 源小数
    * @param {Number} pos 保留长度
    * @return {Number}
    */
    formatFloat: function(src, pos) {
        return Math.round(src * Math.pow(10, pos)) / Math.pow(10, pos);
    },
    /**
    * 数字格式化
    * @param {Number} s
    * @return {String}
    */
    formatNumber: function(s) {
        if (/[^0-9\.\-]/.test(s)) {
            return "0";
        }
        s = ES.Maths.formatFloat(s, 2);
        s = (s + '').replace(/^(\d*)$/, '$1.');
        s = (s + '00').replace(/(\d*\.\d\d)\d*/, '$1');
        s = s.replace('.', ',');
        var re = /(\d)(\d{3},)/;
        while (re.test(s)) {
            s = s.replace(re, '$1,$2');
        }
        s = s.replace(/,(\d\d)$/, '.$1');
        return s.replace(/^\./, '0.');
    },
    unFormatNumber: function(str) {
        return parseFloat(str.replace(/\,/g, ''));
    }
};


/**
 * Jquery 扩展
 */
jQuery.extend({
	/**
	 * 扩展ajax，添加ajax执行提示
	 */
	ajaxTip: function(isShow){
		var html = [];
		if(isShow){
			var top = $(window).height() / 2 + $(window).scrollTop();
			html.push(
				'<div id="jQAjaxTip" style="display:none;position:absolute;z-index:99999;left:50%;top:', top ,'px;padding:10px;margin:-16px 0 0 -75px;width:150px;border:1px solid #f60;background:#fff;-moz-box-shadow:3px 3px 3px #d2d2d2;-webkit-box-shadow:3px 3px 3px #d2d2d2;">',
					'<p><img src="/content/icon-loading-24-24.gif" style="vertical-align: middle;margin-right:10px;"/>正在处理，请稍后...</p>',
				'</div>'
			);
			$('body').append(html.join(''));
			$('#jQAjaxTip').show();
		}else{
			$('#jQAjaxTip').remove();
		}
	}
});